import time
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver

""" 强制等待
# 1. 打开浏览器驱动管理
ChromeIns = ChromeDriverManager().install()
# 2. 创建谷歌浏览器对象
driver = webdriver.Chrome(service=Service(ChromeIns))
# 3. 输入百度网址
driver.get('https://www.baidu.com')
# 4. 强制等待5秒
time.sleep(5)
# 5. 操作
# driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('玄机') # 指定时间内找到不报错
# driver.find_element(By.CSS_SELECTOR, '#ssss')  # 一个不存在的元素，在指定时间内未找到报错
# 6. 关闭浏览器
driver.quit()
"""

""" 隐式等待
# 1. 打开浏览器驱动管理
ChromeIns = ChromeDriverManager().install()
# 2. 创建谷歌浏览器对象
driver = webdriver.Chrome(service=Service(ChromeIns))
# 3. 输入百度网址
driver.get('https://www.baidu.com')
# 4. 隐式等待5秒
driver.implicitly_wait(5)
# 5. 操作
# driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('玄机') # 指定时间内找到不报错
# driver.find_element(By.CSS_SELECTOR, '#ssss')  # 一个不存在的元素，在指定时间内未找到报错
# 6. 关闭浏览器
driver.quit()
"""

""" 显示等待
# 1. 打开浏览器驱动管理
ChromeIns = ChromeDriverManager().install()
# 2. 创建谷歌浏览器对象
driver = webdriver.Chrome(service=Service(ChromeIns))
# 3. 输入百度网址
driver.get('https://www.baidu.com')
# 4. 显示等待5秒
wait = WebDriverWait(driver, 5)

# 5. 操作
# 5.1: title_is(title)
try:
    if wait.until(EC.title_is("百度一下，你就知道")):
        print("标题是'百度一下，你就知道'")
    else:
        print("标题不是'百度一下，你就知道'")
except:
    print("未能获取到期望的标题")

# 5.2: title_contains(title)
try:
    if wait.until(EC.title_contains("百度")):
        print("标题包含'百度'")
    else:
        print("标题不包含'百度'")
except:
    print("未能获取到包含期望字符串的标题")

# 5.3: visibility_of_element_located(locator, str)
try:
    if wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '#kw'))):
        print("搜索框可见")
    else:
        print("搜索框不可见")
except:
    print("未能获取到可见的搜索框")

# 5.4: presence_of_element_located(locator, str)
try:
    if wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#kw'))):
        print("搜索框存在于DOM中")
    else:
        print("搜索框不存在于DOM中")
except:
    print("未能获取到存在于DOM中的搜索框")

# 5.5: visibility_of(element)
try:
    search_box = driver.find_element(By.CSS_SELECTOR, '#kw')
    if wait.until(EC.visibility_of(search_box)):
        print("搜索框可见且输入文本")
    else:
        print("搜索框不可见")
except:
    print("未能获取到可见的搜索框")

# 5.6: alert_is_present()
try:
    if wait.until(EC.alert_is_present()):
        print("弹窗出现")
        alert = driver.switch_to.alert
        alert.accept()
    else:
        print("弹窗未出现")
except:
    print("未能获取到弹窗")

# 6. 关闭浏览器
driver.quit()
"""

""" 隐式和显示结合
# 1. 打开浏览器驱动管理
ChromeIns = ChromeDriverManager().install()
# 2. 创建谷歌浏览器对象
driver = webdriver.Chrome(service=Service(ChromeIns))
# 3. 输入百度网址
driver.get('https://www.baidu.com')
# 4. 隐式等待10秒 + 显示等待15秒，会是 ：5 + 10 = 15 ？？？
driver.implicitly_wait(10)
wait = WebDriverWait(driver, 15)
start = time.time()
try:
    result = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#kwsssssss')))
except:
    end = time.time()
    print('no such element')
# 5. 关闭浏览器
driver.quit()
# 6. 打印时间（秒）
print(end - start)
"""